#include "game.h"
#include "display.c"
#include "btns.c"
#include "uart.c"
#include "timer.c"
#include "game.c"

/**
 * 实现一个方块下落的效果
 * 显示游戏区的界面
 * 扫描按键，每次开始按键被按下，在屏幕顶部随机位置，生成一个方格。
 * 方格从屏幕顶部逐渐下落到底部。
 */

// 游戏状态定义
#define GAME_STATE_WAITING 0    // 等待开始
#define GAME_STATE_PLAYING 1    // 游戏进行中

unsigned char game_state = GAME_STATE_WAITING;
unsigned char block_active = 0;  // 是否有活动方块
unsigned char drop_counter = 0;  // 下落计数器

void timer0_ISR() interrupt 1
{
    // 定时器中断，用于控制方块下落速度
    if (game_state == GAME_STATE_PLAYING && block_active)
    {
        drop_counter++;
        // 根据游戏速度调整下落频率
        if (drop_counter >= (10 - game_setting.speed))
        {
            drop_counter = 0;
            // 尝试让方块下落一行
            if (game_zone_check_shape(game_shape.x, game_shape.y + 1, game_shape.shape))
            {
                // 可以下落，先移除当前位置的方块
                game_zone_remove_shape();
                // 更新位置
                game_shape.y++;
                // 在新位置添加方块
                game_zone_add_shape();
                // 刷新显示
                display_refresh_game_zone();
            }
            else
            {
                // 不能下落，方块到底了
                block_active = 0;
            }
        }
    }
}

void init_system()
{
    // 初始化显示
    display_init();

    // 初始化定时器
    timer0_init();
    timer0_isr_on();

    // 初始化游戏区域数据
    game_zone_data_init();

    // 初始化游戏设置
    game_setting.speed = 1;
    game_setting.score = 0;

    // 显示初始游戏界面
    display_init_game_page();
}

void create_new_block()
{
    // 生成新的方块
    game_zone_new_shape();

    // 检查是否可以放置新方块
    if (game_zone_check_shape(game_shape.x, game_shape.y, game_shape.shape))
    {
        // 可以放置，添加到游戏区域
        game_zone_add_shape();
        block_active = 1;
        drop_counter = 0;

        // 刷新显示
        display_refresh_game_zone();
    }
    else
    {
        // 游戏结束
        game_state = GAME_STATE_WAITING;
        block_active = 0;
        display_game_over();
    }
}

void main()
{
    unsigned char btn_code;

    // 系统初始化
    init_system();

    while (1)
    {
        // 扫描按键
        btn_code = btn_scan();

        if (btn_code == BTN_CODE_START)
        {
            if (game_state == GAME_STATE_WAITING)
            {
                // 开始游戏
                game_state = GAME_STATE_PLAYING;

                // 清空游戏区域
                game_zone_data_init();

                // 重新显示游戏界面
                display_init_game_page();

                // 创建第一个方块
                create_new_block();
            }
            else if (game_state == GAME_STATE_PLAYING && !block_active)
            {
                // 游戏进行中但没有活动方块，创建新方块
                create_new_block();
            }
        }

        // 其他按键处理可以在这里添加
        // 比如左右移动、旋转等功能
    }
}